#ifndef APP_TIM_ENCODE
#define APP_TIM_ENCODE
#include "stm32f4xx_hal.h"

/*************** 宏定义 *****************/
typedef struct {
  int16_t circle_num;
  uint16_t angle_now;
  int angle_total_now;
  float speed;
} encoder_t;

#define angle_max_per_revolution (4095)        // 4294967296
#define encode_period_time 0.001f // s
/****************************************/

/*************** 函数声明 *****************/
void encode_num_init(void);
float _electricalAngle(float shaft_angle, int pole_pairs);
float _normalizeAngle(float angle);
float _get_angle(void);
uint16_t _get_uint_angle(void);
float normal_to_elect(float angle);
void encode_update(void);
float encode_get_speed(void);
int encode_get_location(void);
/****************************************/

/**************** 全局变量声明 ***************/
extern encoder_t encoders[];
extern float zero_electric_angle;
/********************************************/

#endif // APP_TIM_ENCODE
